package com.fanx.sample.web.common;

import lombok.Data;

/**
 * 统一接口响应结构
 *
 */
@Data
public class WebResult<T> {
    /**
     * 状态码 (正常为0, Consts.WEB_RESULT_SUCCESS_CODE)
     */
    private  int code;
    /**
     * 错误原因
     */
    private String message;
    /**
     * 响应结果
     */
    private T data;

    public WebResult() {
    }

    public WebResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * code 目前未发挥任何作用
     * <br>
     * <b>替代方案 {@link #error(String)} 默认code为1000<b>
     * <hr>
     * @param <T>
     * @param code
     * @param message
     * @return
     */
    public static <T> WebResult<T> error(int code, String message) {
        return new WebResult<>(code, message, null);
    }

    public static <T> WebResult<T> error(String message) {
        return new WebResult<>(9999, message, null);
    }

    /**
     * 操作成功(无需返回数据)
     * @param <T>
     * @return
     */
    public static <T> WebResult<T> success() {
        return new WebResult<>(9999, null, null);
    }
    
    /**
     * 操作成功, 返回数据
     * @param <T>
     * @param result
     * @return
     */
    public static <T> WebResult<T> success(T result) {
        return new WebResult<>(0, null, result);
    }

    /**
     * 正常返回时code为固定常量值, 禁止自定义设置<br>
     * 正常返回无需 message
     * @see WebResult#success()
     */
    @Deprecated
    public static <T> WebResult<T> success(int code, String message) {
        return new WebResult<>(code, message,null);
    }
}
